package com.chinasoft.controller;

import com.chinasoft.domain.City;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Controller
public class TestController {
    @RequestMapping("/hello")
    public void getss(){
        System.out.println("---------------------");
    }

    /**
     * @PathVariable  用于接收Rest风格请求的路径参数；将方法形参和url的占位符进行绑定；
     * @param id
     * @param name
     */
    @RequestMapping("/get/{id}/{name}")
    public void getParam(@PathVariable Integer id,@PathVariable(value = "name",required = false) String name){
        System.out.println(id);
        System.out.println(name);
    }

    /**
     *  @RequestParam  接收前端提交的参数（POST/GET提价都可以接收）；
     *  当接收的参数的变量名与表单的name属性不一样时可以使用@RequestParam来绑定，
     *  同时可以封装其他类型的对象，如List、Set、Map
     *  name :前端表单中name属性的值
     *  @RequestParam("name") String cityName
     *  把前端前端表单中name属性的值赋值到cityName中
     */
    @RequestMapping("/demo1")
    public void  demo1(Integer id, @RequestParam("name") String cityName){
        System.out.println(id);
        System.out.println(cityName);
    }
    /**
     * @ModelAttribute
     * @ModelAttribute注解可以作用于方法和参数上
     *  @RequestAttribute
     *     @SessionAttribute
     *     @SessionAttributes  用法类似
     * ● 作用于方法上：在执行Controller其他所有方法之前执行@ModelAttribute注解标注的方法
     * ● 作用于参数上：获取ModelAttribute标注的方法中BingMap中的某个值到某个属性到形参上，
     * 并且此次的BingMap会传递到下一个handler方法；BingMap中的值以前端传递的为准，
     * 如果前端传递了参数则以前端为准，如果没有传递参数则保持@ModelAttribute标注方法中的默认值；
     */

    @ModelAttribute
    public void model(Model model, ModelMap modelMap, Map map){
        model.addAttribute("username","zhangsan");
        modelMap.addAttribute("password","admin");
        map.put("email","zhangsan@qq.com");
    }
    @RequestMapping("/model")
    public void demo02(@ModelAttribute("username") String username,
                       @ModelAttribute("password") String password,
                       @ModelAttribute("email") String email ){
        System.out.println(username);
        System.out.println(password);
        System.out.println(email);

    }
    /**
     *    @ResponseBody 将响应的信息放入响应体中，如果响应的数据是Java对象，则会将本次的响应类型改为application/json
     */
    @ResponseBody
    @RequestMapping("/demo2")
    public City demo02(){
        City city = new City(1, "chongqing", 5500.0, true);
        return city;//{"id":1,"cityName":"chongqing","capital":true,"gdp":5500.0}
    }

}
